package com.zhongying.jf.util;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;

/**
 * Created by heliu on 2017/7/17.
 */
public class MapToObject {

    /**
     * 判断对象是否Empty(null或元素为0)<br>
     * 实用于对如下对象做判断:String Collection及其子类 Map及其子类
     *
     * @param pObj
     *            待检查对象
     * @return boolean 返回的布尔值
     */
    public static boolean isEmpty(Object pObj) {
        if (pObj == null)
            return true;
        if (pObj == "")
            return true;
        if (pObj instanceof String) {
            if (((String) pObj).length() == 0) {
                return true;
            }
        } else if (pObj instanceof Collection) {
            if (((Collection) pObj).size() == 0) {
                return true;
            }
        } else if (pObj instanceof Map) {
            if (((Map) pObj).size() == 0) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断对象是否为NotEmpty(!null或元素>0)<br>
     * 实用于对如下对象做判断:String Collection及其子类 Map及其子类
     *
     * @param pObj
     *            待检查对象
     * @return boolean 返回的布尔值
     */
    public static boolean isNotEmpty(Object pObj) {
        if (pObj == null)
            return false;
        if (pObj == "")
            return false;
        if (pObj instanceof String) {
            if (((String) pObj).length() == 0) {
                return false;
            }
        } else if (pObj instanceof Collection) {
            if (((Collection) pObj).size() == 0) {
                return false;
            }
        } else if (pObj instanceof Map) {
            if (((Map) pObj).size() == 0) {
                return false;
            }
        }
        return true;
    }

    /**
     * 以Integer类型返回属性
     *
     * @param source 原始数据
     * @param key 键
     * @return  Integer 键值
     */
    public static Integer mapInteger(Map source, String key){
        Object obj = TypeConvertUtil.convert(source.get(key), "Integer", null);
        if (obj != null)
            return (Integer) obj;
        else
            return null;
    }

    /**
     * 以BigInteger类型返回属性
     *
     * @param source 原始数据
     * @param key 键
     * @return  BigInteger 键值
     */

    public static BigInteger mapBigInteger(Map source, String key){
        BigInteger outValue = null;
        Object obj = source.get(key);
        if (obj instanceof BigInteger) {
            outValue = (BigInteger) obj;
        }else{
            outValue = new BigInteger(source.get(key).toString());
        }
        return outValue;
    }

    /**
     * 以String类型返回属性
     *
     * @param source 原始数据
     * @param key 键
     * @return String 键值
     */
    public static String mapString(Map source, String key) {
        Object obj = TypeConvertUtil.convert(source.get(key), "String", null);
        if (obj != null)
            return (String) obj;
        else
            return "";
    }

    /**
     * 以BigDecimal类型返回属性
     *
     * @param source 原始数据
     * @param key 键
     * @return BigDecimal 键值
     */
    public static BigDecimal mapBigDecimal(Map source, String key) {
        Object obj = TypeConvertUtil.convert(source.get(key), "BigDecimal", null);
        if (obj != null)
            return (BigDecimal) obj;
        else
            return null;
    }

    /**
     * 以Date类型返回属性
     *
     * @param source 原始数据
     * @param Key 键
     * @return Date 键值(yyyy-MM-dd)
     */
    public static Date mapDate(Map source, String key) {
        Object obj = TypeConvertUtil.convert(source.get(key), "Date", "yyyy-MM-dd");
        if (obj != null)
            return (Date) obj;
        else
            return null;
    }

    /**
     * 以DateTime类型返回属性
     *
     * @param source 原始数据
     * @param Key 键
     * @return Timestamp 键值(yyyy-MM-dd HH:mm:ss)
     */
    public static Timestamp mapDateTime(Map source, String key) {
        Object obj = TypeConvertUtil.convert(source.get(key), "Timestamp", "yyyy-MM-dd HH:mm:ss");
        if (obj != null)
            return (Timestamp) obj;
        else
            return null;
    }

    /**
     * 以Boolean类型返回属性
     *
     * @param source 原始数据
     * @param Key 键
     * @return Boolean 键值
     */
    public static Boolean getBoolean(Map source, String key) {
        Object obj = TypeConvertUtil.convert(source.get(key), "Boolean", null);
        if (obj != null)
            return (Boolean) obj;
        else
            return null;
    }

    /**
     * 拼接数组
     * @param array
     * @param separator
     * @return
     */
    public static String arrayToString(List<String> array, String separator){
        StringBuffer sb=new StringBuffer();
        for (int i =0; i < array.size() ;i++) {
            sb.append("'");
            sb.append(array.get(i));
            sb.append("'");

            if(i < (array.size() - 1)){
                sb.append(separator);
            }
        }
        return sb.toString();

    }

}
